首页 > 编程知识 正文

c语言返回数组指针(指针c语言给数组赋值)

时间:2023-05-05 07:50:06 阅读:103343 作者:3545

关键词:指针、数组、指针和数组、指针操作、标准库函数开始和结束;

指针和数组:

在C语言中,指针与数组密切相关。

当使用数组时,编译器实际上将其转换为指针。

数组还有另一个特性:编译器会自动用指向数组第一个元素的指针替换数组名。

string StringArray[10]={'A1 ',' A2 ',' A3 ',' A4 ',' A5 ',' A6 ',' A7 ',' A8 ',' A9 ',' A10 ' };

string * p=StringArray//相当于p=stringgarray[0],所以在C语言中,数组操作就是指针操作。

所以这些做法是等价的:

1.

for(int I=0;i 10I){ 0

cout StringArray[I]' ';

}2.

string * ArrayEnd=end(string array);

for(string * p=StringArray;p ArrayEndp){ 0

cout * p“”;

}3.

string * ArrayBegin=StringArray

for(int I=0;i 10I){ 0

cout *(Arraybegin I)' ';

}4.

for(int I=0;i 10I){ 0

cout Arraybegin[I]' ';

}

指针操作:

指针可以在大小上进行比较,可以加或减一个整数,可以相互增加、减少和减少。

注意:这些只能在相同类型的指针之间进行。

1.两个相同类型的指针变量可以在大小上进行比较。

P1地址p2,p1 p2值为真。地址p1=地址p2,p1==p2值为真地址p1地址p2,p1 p2值为真2。可以减去两个相同类型的指针变量。

两个T *型指针p1和p2p1-p2=(地址P1-地址p2)/sizeof(T)注意,两个指针相减的结果不是两个指针所在物理地址的相减结果。

c是强数据类型的,编译器会根据指针指向的变量类型进行相应的调整。

因此,两个整形指针相减的结果是实际物理地址的差,然后除以4。

3.从指针变量中加或减一个整数的结果就是指针。

P3360T * n 3360整型变量或常量的指针p 3360T *指向地址的指针:p n sizeof(T)4。指针变量可以自动增加或减少。

T*指针p指向地址np,p:p指向n sizeof (t) p-,-,p : p指向n sizeof (t) 5。下标操作符“]”可以操作指针

p是T *类型的指针,n是整数变量或常数p[n]相当于*(p ^ n)

指针和机器物理地址:

指针可以理解为一种数据类型,与它所指向的变量类型有很强的相关性;

所以指针变量并不完全等于其机器物理地址的值。

因此,指针的-与机器地址的-不同。

字符串*类型的指针ArrayBegin加1后,实际物理地址增加32,即字符串的字节数。

ArrayBegin:0x7ffc061df210

ArrayBegin 1 :0x7ffc061df230如果想要获取指针的实际物理地址,

强制类型转换可以用在C、

将指针转换为long类型的整数地址;

long long intatraybegin _ address=(long long)intArrayBegin;

示例代码:中的其他详细信息

在cout中,十六进制可用于将指针直接输出为十六进制数,对应于其编译后的实际物理地址。

指针被强制转换为长整型;如果使用int,可能会出现溢出,导致编译错误。

您可以使用标准库函数begin和end来获取数组第一个元素的地址和最后一个元素地址之后的地址。

其他细节请直接查看源代码。

程序源代码:

#包含iostream

#包含字符串

#包含迭代器

使用命名空间标准;

int main()

{

string StringArray[10]={'A1 ',' A2 ',' A3 ',' A4 ',' A5 ',' A6 ',' A7 ',' A8 ',' A9 ',' A10 ' };

字符串*Arra

yEnd = end(StringArray) ; for (int i=0; i < 10 ; ++i ) { cout << StringArray[i] << " " ; } cout << endl; for (string *p = StringArray ; p != ArrayEnd; ++p ) { cout << *p << " " ; } cout << endl; for (string *p = StringArray ; p < ArrayEnd; ++p ) { cout << *p << " " ; } cout << endl; string *ArrayBegin = StringArray; for (int i=0 ; i < 10 ; ++i ) { cout << *(ArrayBegin + i) << " " ; } cout << endl; for (int i=0 ; i < 10 ; ++i ) { cout << ArrayBegin[i] << " " ; } cout << endl; cout << "size of string is:" << sizeof(string) << endl ; cout << "ArrayBegin:"<< "t" << hex << ArrayBegin << endl ; cout << "ArrayBegin +1 :"<< "t" << hex << (ArrayBegin +1 ) << endl ; int intArray[] = {11, 12} ; int *intArrayBegin = intArray; cout << "size of int is:" << sizeof(int) << endl ; cout << "intArrayBegin:"<< "tt" << hex << intArrayBegin << endl ; cout << "intArrayBegin +1 :"<< "t" << hex << (intArrayBegin +1 ) << endl ; int *intArrayEnd = end(intArray); cout << "intArrayEnd - intArrayBegin =" << (intArrayEnd - intArrayBegin) << endl ; long long intAttrayBegin_address = (long long) intArrayBegin ; cout << "intAttrayBegin_address = " << hex << intAttrayBegin_address << endl ; long long intAttrayEnd_address = (long long) intArrayEnd ; cout << "intAttrayEnd_address - intAttrayBegin_address = " << intAttrayEnd_address - intAttrayBegin_address << endl ; return 0 ; }

输出结果:

A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 size of string is:32 ArrayBegin: 0x7ffc061df210 ArrayBegin +1 : 0x7ffc061df230 size of int is:4 intArrayBegin: 0x7ffc061df208 intArrayBegin +1 : 0x7ffc061df20c intArrayEnd - intArrayBegin = 2 intAttrayBegin_address = 7ffc061df208 intAttrayEnd_address - intAttrayBegin_address = 8

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。