一直在想,用[]或*声明变量之间的区别是什么?我看待它的方式:
char *str = new char[100];
char str2[] = "Hi world!";
Run Code Online (Sandbox Code Playgroud)
..应该是主要的区别,虽然我不确定你是否可以做类似的事情
char *str = "Hi all";
Run Code Online (Sandbox Code Playgroud)
..因为指针应该引用一个静态成员,我不知道它是否可以?
无论如何,真正困扰我的是知道以下两者之间的区别:
void upperCaseString(char *_str) {};
void upperCaseString(char _str[]) {};
Run Code Online (Sandbox Code Playgroud)
所以,如果有人能告诉我差异,我将不胜感激吗?我有一种预感,除了一些特殊情况外,两者都可以编译得相同吗?
泰
我写了越来越多的C应用程序,现在我想知道关于强制转换的东西.在C++中,动态强制转换是一种非常昂贵的操作(例如向下转换),但我甚至不知道静态转换.
在C中,我不得不写这样的东西:
assert ( p ); /* p is void* */
int v = *(int*)p;
Run Code Online (Sandbox Code Playgroud)
它是一个"C动态演员"吗?它static_cast<int*>(p)与C++ 完全相同吗?它要多少钱?
提前致谢.
这里对C很新,我认为我几乎没有掌握指针的概念,但语法有点令人困惑所以我在试图理解这个表达式的x = (char *) &a;含义时遇到了麻烦.
其余功能供参考:
#include<stdio.h>
int main()
{
int a;
char *x;
x = (char *) &a;
a = 512;
x[0] = 1;
x[1] = 2;
printf("%d\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,为什么有必要写x = (char *) &a;而不是仅仅x = &a;?添加了(char *)什么来改变表达式?