本文目錄一覽:
C語言如何定義指針指向字符型二維數組
使用指針變量訪問二維數組的任意一個元素的方法:
1.使用列指針:定義一個列指針p,讓它指向二維數組的第0個元素
int a[3][4];
int *p;
p=a[0][0];
//因為a[0]是第0行的數組名,所以p=a[0][0]相當於p=a[0],因為a[i][j]前面共有i*4+j個元素
該二維數組的任意i行j列元素可表示為*(p+i*4+j)。
2.使用行指針:定義一個行指針p,讓它指向二維數組的第0行
int a[3][4];
int (*p)[4];
p=a; //也可以為p=a[0];
其中* ( *(p+i)+j)表示任意一個i行j列的元素。
擴展資料:
數組的使用規則:
1.可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。
2.只能給元素逐個賦值,不能給數組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;請注意:在C、C#語言中是這樣,但並非在所有涉及數組的地方都這樣,數據庫是從1開始。
3.如不給可初始化的數組賦初值,則全部元素均為0值。
4.如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如:static int a[5]={1,2,3,4,5};可寫為:static int a[]={1,2,3,4,5};動態賦值可以在程序執行過程中,對數組作動態賦值。這時可用循環語句配合scanf函數逐個對數組元素賦值。
參考資料:
百度百科-數組
有關C語言指向指針的指針
我就用自己的理解給你講一下吧
指針其實就是指向一個變量的變量,具體的說,一個指針它裡面保存的是一個變量的地址,而一般的變量保存的是數據,所以指針它的本質也是變量.
指向指針的指針就是一個指針它指向另外一個指針變量,它保存的是另外一個指針的地址,指向指針的指針其實和一般的指針沒什麼兩樣,只是它保存的是另一個指針,一般的指針保存的是地址,指向指針的指針訪問數據時是間接訪問,是通過它保存的指針來進行訪問,比一般的指針多了一個中間量,它可以進行**P的運算,而一般的指針的運算為*p,
不知道我的表達能力如何???
如有不懂,請給我發消息
C語言編程指向結構體數組的指針
下面的程序是我以前寫的,你稍微改改就能符合你的要求了
#include stdio.h
#include malloc.h
typedef struct st
{
char name[20];
int chinese;
int math;
int english;
float average;
}student;
void swap(student *a, student *b)
{
student temp = *a;
*a = *b;
*b = temp;
}
void sort(student *array, int n)
{
int i, j, flag;
for (i = 0; i n – 1; i++)
{
flag = 1;
for (j = 0; j n – i – 1; j++)
{
if (array[j].average array[j + 1].average)
{
swap(array + j, array + j + 1);
flag = 0;
}
}
if (flag)
break;
}
}
void print(student *array, int n)
{
int i;
printf(“姓名\t語文\t數學\t英語\t平均成績\n”);
for (i = 0; i n; i++)
{
printf(“%s\t%d\t%d\t%d\t%f\n”, array[i].name, array[i].chinese,
array[i].math, array[i].english, array[i].average);
}
}
int main()
{
int number = 9;
int i;
student *stu = (student *)malloc(sizeof(student) * 9);
for (i = 0; i number; i++)
{
printf(“請輸入第%d個學生的姓名及成績(姓名 語文 數學 英語成績以空格隔開):\n”, i + 1);
scanf(“%s %d %d %d”, (*(stu + i)).name, (*(stu + i)).chinese,
(*(stu + i)).math, (*(stu + i)).english);
(*(stu + i)).average = ((*(stu + i)).chinese +
(*(stu + i)).math + (*(stu + i)).english) / (float)3.0;
}
print(stu, number);
sort(stu, number);
print(stu, number);
free(stu);
return 0;
}
C語言 指向二維數組的指針
a是指針,不過是行指針,p的基類型int,而 a 的基類型是一個包含4個整形元素的一類數組.
int (*p)[4] = a;這樣定義p也會編譯過去的,因為這時p的基類型也是一個包含4個整形元素的一類數組。
至於int* p = a[0];編譯正確,是因為a[0]也是指針,基類型也是int。
C語言中 數組指針的意義
你說的是指向數組的指針如int(*)[]?
指向數組的指針有一種非常常見的用法,就是令其指向二維數組的某一行。如二維數組a[3][4],它的本質是一維數組的數組,即a本質上是一個3個元素的數組,其中的每個元素都是一個int[4]數組。要想使用一個指針p指向其中的某個元素,就必須將p定義為數組指針int (*p)[4],它指向一個int[4]數組。然後,才可以令p指向a:p=a。
C語言指向二維數組的指針
一、你的 float score 數組定義的是:一個3行、4列的二維浮點數組,數組的元素為浮點數。如果你換個格式書寫就清晰了!
float score[3][4]={{65,67,70,60,},{80,87,90,81,},{90,99,100,98}};
在調用的過程中,score 就是這個數組的首地址,指向的是浮點數組{65,67,70,60,}。score + 1 指向的是數組{80,87,90,81,}。
二、你的 float *p 定義的是:一個指向浮點數的指針。這個是一維的。
在調用的過程中,float 指向的是 xx。一個浮點數字。
兩個的定義不同,所以參數傳遞過程中會出錯。
三、你的 float (*p)[4] 定義的是:一個指向含有四個元素的浮點數組的指針。
在調用的過程中,float 指向的是{xxx,xx,xx,xx,},由四個浮點數組成的數組。
這時兩個定義相同,所以參數傳遞過程中沒有錯誤。
四、有個建議,你的程序書寫格式不清晰,不利於你糾錯和修改,應該盡量的清晰、明確,不建議使用簡化方式定義參數。
作為一個軟件工作者,應該盡量使程序流暢、格式清晰、易讀,這是一個軟件工作者最基本的職業素養。
格式化後,程序如下,會清晰很多:
#includestdio.h
void main()
{
void search (float (*p)[4],int n);/*這裡的 float *p 好像有問題*/
float score[3][4]={{65,67,70,60,},{80,87,90,81,},{90,99,100,98}};
search(score,2);
}
void search(float (*p)[4],int n)/*這裡的 float *p 好像有問題*/
{
int i;
printf(“the score of No.%d are:\n”,n);
for(i=0;i4;i++)
{
printf(“%5.2f”,*(*(p+n)+i));
}
printf(“\n”);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/289027.html